1. Field
This disclosure relates generally to video processing, and more specifically, to a system and method for load balancing a video signal in a multi-core processor.
2. Related Art
The Advanced Video Coding (AVC) standard, Part 10 of MPEG4 (Motion Picture Experts Group), otherwise known as H.264, was developed to enable transmission or storing of video signals with improved quality at a constant bit rate (CBR), or variable bit rate (VBR). A present day encoder compliant with the H-264 standard can be designed to run on a single-core processor. However, a commonly available single-core processor is not capable of running fast enough to reach high-definition resolutions (e.g. 720p, 1080i, and 1080p). In order to reach high-definition resolutions in near real-time, the H.264 encoder can be designed to run in parallel on a multi-core processor.
To effectively encode a video signal in a multi-core processor, video data should be relatively evenly divided between the cores for parallel processing. This load balancing is generally achieved using either data partitioning or function partitioning. In data partitioning, a frame of data is divided into multiple portions and provided to the cores in parallel. This approach is relatively easily implemented. However, it is difficult to insure proper load balancing between processor cores because some of the data will have more complex processing requirements. For example, one slice of a frame may include movement, or finer details than another slice of the frame. This can lead to processing bottlenecks causing some cores to be idle while others are busy.
In load balancing using function partitioning each core is assigned a different processing function, such as motion estimating or encoding. The data is then processed in a pipelined fashion. For example, one processor may apply a first function to video data and then pass the modified data to a second processor for a second function. However, it can be difficult to load balance by function because algorithms cannot easily be divided into an arbitrary number of blocks to match the number of processor cores.
Therefore, what is needed is a system and method that solves the above problems.